# 元组tuple

tup = (1, 2, "zhang")
print(tup[2])

print("----------------合并--------------")
# 合并和重复
tup1 = (1, 2, "zhang")
tup2 = (3, 4, "san")
tup3 = ("hello",)
print(tup1 + tup2 + tup3)

print("----------------成员操作--------------")
# 成员操作
print(1 in tup1)
print(5 not in tup2)

# 类型转换，将可迭代元素转为元组，如下结果：('d', 'd', 'd')
print(tuple("ddd"))

print("----------------解包--------------")
# 元组解包：允许将元组中的元素复制给多个变量
tup3 = (1, 2, 3)
a, b, c = tup3
print(a, b, c)
# 输出结果为 1 2 3
# 使用 * 运算符解包剩余元素
tup4 = (1, 2, 3, 4, 5)
a, *b, c = tup4
print(a)
print(b)
print(c)
# 输出结果
# 1
# [2, 3, 4]
# 5

print("----------------查询--------------")
# 元组方法
# 返回元素在元组中出现的次数
tup3.count(2)
# 返回元素在元组中第一次出现的索引
tup3.index(2)

print("----------------用途--------------")

# 元组被广泛用作默认集合类型，它可以作为函数的参数和返回值
def func1(a, b, c):
    print(a, b, c)

tup5 = (1, 2, 3)
func1(*tup5)

def func2():
    return 1, 2, 3
tup6 = func2()
# 返回值：(1, 2, 3)
print(tup6)

# 元组数据的不可变性使它在多线程环境中是安全的，可以避免数据竞争

